
// 引入 核心模块 http  http模块不需要下载，随node已经安装到系统中
const http = require('http')
const fs = require('fs')
const nunjucks = require("nunjucks")

const server = http.createServer()

const users = [
  {
    id: 1, username: "zhangsan"
  },
  {
    id: 1, username: "lisi"
  },
  {
    id: 1, username: "wangwu"
  }
]

// 路由表
const routesMap = new Map()

// 定义路由
routesMap.set("/home", async (req, res) => {
  res.setHeader("content-type", "text/html;charset=utf-8")
  res.end("首页")
})
routesMap.set("/list", async (req, res) => {
  res.setHeader("content-type", "text/html;charset=utf-8")
  // 获取模板
  const tpl = fs.readFileSync("./template/list.html").toString()
  // nunjucks.renderString(tpl,data)
  /**
   * 返回值是渲染后字符串
   * tpl 指代模板 -> 页面
   * data  携带的数据（渲染的数据）
   */
  const str = nunjucks.renderString(tpl, { users })
  res.end(str)
})

// 监听事件  监听请求 
server.on("request", async (req, res) => {
  // 获取路径
  let url = req.url
  // 1、获取当前客户端请求的url
  // 2、解析 url 字符串
  // 3、获取 url 中 path 部分的值
  // 4、根据 path 中的读取我们存放在硬盘中的对应资源文件

  if (url.startsWith("/public")) {
    let content = fs.readFileSync(`.${url}`)
    // 5、把读取到的资源文件内容作为响应内容返回给客户端
    res.end(content)
  }

  // 获取到路由
  const routeHandle = routesMap.get(url)
  if (routeHandle) {
    await routeHandle(req, res)
  } else {
    res.statusCode = 404
    res.end("页面丢失")
  }
})
// 监听端口
server.listen(8080)
console.log("running on 8080")
